<?php
/**
 * 查询year是2013年的所有电影
 * author: JiangJun
 * CreateTime:2021/7/25 21:51
 */


require '../vendor/autoload.php';


use Aws\DynamoDb\Exception\DynamoDbException;
use Aws\DynamoDb\Marshaler;

$sdk = new Aws\Sdk([
    'region'   => 'us-west-2',
    'version'  => 'latest'
]);

$dynamodb = $sdk->createDynamoDb();
$marshaler = new Marshaler();

$tableName = 'Movies';

$eav = $marshaler->marshalItem([':yyyy'=>2013]);

//查询所有2013年的电影
$params = [
    'TableName' => $tableName,
    //注意，这里的属性名和属性值 ，都必须要使用占位符。
    //属性名year是保留字，不能直接使用。否则的话，属性名是可以直接写的
    //属性值，在任何表达式中都必须用占位符。
    'KeyConditionExpression' => '#yr = :yyyy',//对于query来说,KeyCondition是必须的
    'ExpressionAttributeNames'=> [ '#yr' => 'year' ],//绑定属性名，
    'ExpressionAttributeValues'=> $eav//绑定属性值
];

//错误示例:查询条件只给了sort key，没有指定Partion Key
$eav = $marshaler->marshalItem([':t'=>'Jiang Jun']);
$params2 = [
    'TableName' => $tableName,
    'KeyConditionExpression' => "#t = :t",//只指定了 sort key 会报错
    'ExpressionAttributeNames'=> [ '#t' => 'title' ],//属性名
    'ExpressionAttributeValues'=> $eav//属性值
];

echo "Querying for movies from 2013.\n";

try {
    $result = $dynamodb->query($params);

    echo "Query succeeded.\n";

    foreach ($result['Items'] as $movie) {
        echo $marshaler->unmarshalValue($movie['year']) . ': ' .
            $marshaler->unmarshalValue($movie['title']) . "\n";
            //json_encode($movie['info']) ;
    }
    echo 'Count:' .$result['Count'] . PHP_EOL;

} catch (DynamoDbException $e) {
    echo "Unable to query:\n";
    echo $e->getMessage() . "\n";
}